/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tlp.ucsur.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import tlp.ucsur.beans.AulaBean;
import tlp.ucsur.conexion.DBConnection;
import java.util.ArrayList;
import java.util.List;
import tlp.ucsur.beans.EquipoBean;
import tlp.ucsur.beans.LocalBean;

/**
 *
 * @author Administrador
 */
public class MySqlAulaDAOImpl implements AulaDAO {

  @Override
  public AulaBean getAula(int codigoAula) {
    String sql = "select¨* from aula where idaula=?";
    try {
      List<EquipoBean> lista_equipo = new ArrayList<EquipoBean>();
      String sql1 = "select * from aula_equipo where codaula=?";
      Connection conn = DBConnection.getConnection();
      PreparedStatement ps1 = conn.prepareStatement(sql1);
      ps1.setInt(1, codigoAula);
      ResultSet rs1 = ps1.executeQuery(sql1);
      while (rs1.next()) {
        EquipoBean equipo = new EquipoBean();
        equipo.setCodigoEquipo(rs1.getInt("codequipo"));
        lista_equipo.add(equipo);
      }
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setInt(1, codigoAula);
      ResultSet rs = ps.executeQuery(sql);
      if (rs.next()) {
        LocalBean local = new LocalBean();
        AulaBean aula = new AulaBean();
        aula.setCodigoAula(rs.getInt("idaula"));
        aula.setNombreAula(rs.getString("nombreAula"));
        aula.setAforoAula(rs.getString("aforo"));
        aula.setEstado(rs.getString("estado"));
        aula.setEquipoAula(lista_equipo);
        local.setCodigoLocal(rs.getInt("idLocal"));
        aula.setLocal(local);

        return aula;
      }
      ps1.close();
      ps.close();
      rs1.close();
      rs.close();
      conn.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return null;
  }

  @Override
  public List<AulaBean> getListaAulasPorFiltros(String estado, int codlocal) {
    String sql = "select * from aula where idLocal=? and estado=?";
    List<AulaBean> lista_aula = new ArrayList<AulaBean>();
    try {
      Connection conn = DBConnection.getConnection();
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setInt(1, codlocal);
      ps.setString(2, estado);
      ResultSet rs = ps.executeQuery(sql);
      while (rs.next()) {
        AulaBean aula = new AulaBean();
        LocalBean local = new LocalBean();
        List<EquipoBean> lista_equipos = new ArrayList<EquipoBean>();
        aula.setCodigoAula(rs.getInt("idaula"));
        aula.setNombreAula(rs.getString("nombreAula"));
        aula.setAforoAula(rs.getString("aforo"));
        aula.setEstado(rs.getString("estado"));
        local.setCodigoLocal(rs.getInt("idLocal"));
        aula.setLocal(local);
        String sql1 = "select * from aula_equipo where codaula=?";
        PreparedStatement ps1 = conn.prepareStatement(sql1);
        ps1.setInt(1, rs.getInt("idaula"));
        ResultSet rs1 = ps1.executeQuery(sql1);
        while (rs1.next()) {
          EquipoBean equipo = new EquipoBean();
          equipo.setCodigoEquipo(rs1.getInt("codequipo"));
          lista_equipos.add(equipo);
        }
        aula.setEquipoAula(lista_equipos);

        lista_aula.add(aula);
      }
      return lista_aula;
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return null;
  }

  @Override
  public void insertar(AulaBean aula, List<EquipoBean> lista_equipo) {
    String sql = "insert into aula (nombreAula,aforo,estado,idLocal)values(?,?,?,?)";
    LocalBean local = aula.getLocal();
    try {
      Connection conn = DBConnection.getConnection();
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setString(1, aula.getNombreAula());
      ps.setString(2, aula.getAforoAula());
      ps.setString(3, aula.getEstado());
      ps.setInt(4, local.getCodigoLocal());
      ps.executeUpdate();
      String sql1 = "insert into aula_equipo (codequipo,codaula) values(?,?)";
      PreparedStatement ps1 = conn.prepareStatement(sql1);
      for (EquipoBean e : lista_equipo) {
        ps1.setInt(1, e.getCodigoEquipo());
        ps1.setInt(2, aula.getCodigoAula());
        ps1.executeUpdate();
      }
      ps.close();
      ps1.close();
      conn.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  @Override
  public void eliminar(int codigoAula) {
    String sql = "select * from aula_equipo where codaula=?";
    List<EquipoBean> lista_equipo = new ArrayList<EquipoBean>();
    try {
      Connection conn = DBConnection.getConnection();
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setInt(1, codigoAula);
      ResultSet rs = ps.executeQuery(sql);
      while (rs.next()) {
        EquipoBean equipo = new EquipoBean();
        equipo.setCodigoEquipo(rs.getInt("codequipo"));
        lista_equipo.add(equipo);
      }
      String sql1 = "delete from aula_equipo where codaula=? and codequipo=?";
      PreparedStatement ps1 = conn.prepareStatement(sql1);
      for (EquipoBean e : lista_equipo) {
        ps1.setInt(1, codigoAula);
        ps1.setInt(2, e.getCodigoEquipo());
        ps1.executeUpdate();
      }
      String sql2 = "delete from aula where idaula=?";
      PreparedStatement ps2 = conn.prepareStatement(sql2);
      ps2.setInt(1, codigoAula);
      ps2.executeUpdate();

      rs.close();
      ps.close();
      ps1.close();
      ps2.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  @Override
  public void actualizar(AulaBean aula) {
    LocalBean local = aula.getLocal();
    String sql = "update aula set nombreAula=?,aforo=?,estado=?,idLocal=? where idaula=?";
    try {
      Connection conn = DBConnection.getConnection();
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setString(1, aula.getNombreAula());
      ps.setString(2, aula.getAforoAula());
      ps.setString(3, aula.getEstado());
      ps.setInt(4, local.getCodigoLocal());
      ps.setInt(5, aula.getCodigoAula());
      ps.executeUpdate();

      ps.close();
      conn.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}
